Počet bodov: 25, časový limit: 500ms
Aby ste získali body z tejto úlohy, stačí zadať tajné heslo.
Vy ho neviete? Hm, to dáva zmysel, však je tajné.
Tak vám dáme číslo ktoré dostanete, ak ho preženiete touto náhodnou funkciou:
long long mod = 1LL << 50;
long long zahashuj(string s)
{
long long res = 1;
for(int i=0;i<s.size();++i)
{
res *= (s[i] + 31*i);
res ^= (1LL << (s[i] & 47)) * (s[i] | 19);
res %= mod;
}
return res;
}
Čože? Aj tak nemáte šancu ho uhádnuť? Tak vám dáme nápovedu…
V jedinom riadku vstupu je výsledok vyššie popísanej funkcie, keď do nej dáme tajné heslo – nezáporné číslo \(x < 2^{50}\).
Vypíšte tajné heslo.
Tu sú nápovedy pre všetkých šesť vstupov:
číslo vstupu | vstup | nápoveda |
---|---|---|
\(1\) | \(45072900280688\) | Päťpísmenové slovo |
\(2\) | \(78124527355648\) | Prvočíslo medzi \(10^9\) a \(10^9+10^5\) |
\(3\) | \(708784046993527\) | Palindróm z písmen, nie dlhší ako desať znakov |
\(4\) | \(657242457795718\) | Slovo dlhé desať znakov, skladajúce sa z troch rôznych písmen |
\(5\) | \(762177199365632\) | Odhad Wolfram Alpha na populáciu Číny |
\(6\) | \(414003830259712\) | Hodobox ľahko zabúda, a tak si toto heslo zapísal do zadania niektorej úlohy |
Všetky slová sa skladajú z veľkých písmen anglickej abecedy.
Input:
81975681088452
Output:
PRIKLAD
f(“PRIKLAD”) = \(81975681088452\)